package com.woniuxy.exam.utils;

import com.woniuxy.commons.entity.ExamType;
import com.woniuxy.commons.entity.QuestionBank;
import java.util.ArrayList;
import java.util.List;

/**
 * @author zouyang
 * @date 2020/7/27 - 15:35
 */
public class TreeUtils {
    /**
     * 生成菜单
     * @param all
     * @return
     */
    public static List getMenu(List<QuestionBank> all){
        //实例化一个根节点数组
        List<QuestionBank> root = new ArrayList<>();
        for (QuestionBank questionBank : all) {
            //数据库查出pid为0或空，就直接加入到根节点
            if(questionBank.getPid()==0||questionBank.getPid()==null){
                root.add(questionBank);
            }
        }
        for (QuestionBank questionBank : root) {
            List<QuestionBank> children = new ArrayList<>();
            questionBank.setChildren(getChildren(all,questionBank));
        }
        return root;
    }

    /**
     * 生成树枝
     * @param all 生成菜单传过来的剩余数据
     * @param root 根节点对象
     * @return
     */
    public static List<QuestionBank> getChildren(List<QuestionBank> all,QuestionBank root){
        List<QuestionBank> children = new ArrayList<>();
        for (QuestionBank questionBank : all) {
            //剩下的所有数据中，有pid和root的id一样的，就是其子节点，判断添加进children
            if(questionBank.getPid()==root.getId()){
                children.add(questionBank);
            }
        }
        for (QuestionBank child : children) {
            //核心，递归。
            //子节点下还有众多子节点，为了将其添加进自己的children中，需要用到递归，root不再是根节点，
            //而是这个子节点
            child.setChildren(getChildren(all,child));
        }
        return children;
    }

    public static List getExamTypeMenu(List<ExamType> all){
        //实例化一个根节点数组
        List<ExamType> root = new ArrayList<>();
        for (ExamType examType : all) {
            //数据库查出pid为0或空，就直接加入到根节点
            if(examType.getPid()==0||examType.getPid()==null){
                root.add(examType);
            }
        }
        for (ExamType examType : root) {
            List<QuestionBank> children = new ArrayList<>();
            examType.setChildren(getChildren(all,examType));
        }
        return root;
    }

    /**
     * 生成树枝
     * @param all 生成菜单传过来的剩余数据
     * @param root 根节点对象
     * @return
     */
    public static List<ExamType> getChildren(List<ExamType> all,ExamType root){
        List<ExamType> children = new ArrayList<>();
        for (ExamType examType : all) {
            //剩下的所有数据中，有pid和root的id一样的，就是其子节点，判断添加进children
            if(examType.getPid()==root.getId()){
                children.add(examType);
            }
        }
        for (ExamType child : children) {
            //核心，递归。
            //子节点下还有众多子节点，为了将其添加进自己的children中，需要用到递归，root不再是根节点，
            //而是这个子节点
            child.setChildren(getChildren(all,child));
        }
        return children;
    }
}
